package demo4;

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
import java.util.Iterator;

public class ListGet {
    public static void main(String[]args) {
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        List<Integer> list1 = list.subList(2, 4);//截取下标的范围2-4，左闭右开,sublist返回的子列表视图，本质上是指向原列表的底层数组及相关的索引范围
        System.out.println(list);
        System.out.println(list1);//打印截取内容
        list1.set(1, 99);
        System.out.println(list);//为什么会改变，sublist会把子列表的索引映射回原数组，直接操作原数组，它们操作的是同一块内存，这就是为什么修改子列表，原列表会同步改变
        System.out.println(list1);
        //顺序表删除数值
        list.remove(new Integer(3));//内部传入一个对象，才可以删除数值
        System.out.println("删去数值3后为：");
        System.out.println(list);
        //使用迭代器Iterator输出
        Iterator<Integer> it = list.iterator();
        while (it.hasNext()) {//检查是否还有下一项
            System.out.print(it.next() + " ");//取出这个元素并且移动迭代器指针到下一个元素
        }
        System.out.println();

        //使用ListIterator迭代器输出
        ListIterator<Integer> it2 = list.listIterator();//listIterator是方法名
        while (it2.hasNext()) {
            System.out.print(it2.next()+" ");
        }
        System.out.println();
        //ListInterator扩展了Interator的很多功能(反向迭代)
        ListIterator<Integer> it3=list.listIterator(list.size());//因为previous取当前元素的前一个
        while (it3.hasPrevious()){  //检查前面是否还有元素
            System.out.print(it3.previous()+" ");//反向打印方法previous（），取出当前元素的“前面”元素并且迭代器指针向前移一位
        }
    }
}
